#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main(int argc, char *argv[])
{
    printf("父/main(%d)进程开始执行\n",getpid());
    int value = 100;
    pid_t pid = fork();
   if(pid == 0) //子进程
    {
        value++;
        printf("子进程(%d)开始执行,value=%d ,value的地址=%p\n",getpid(), value,&value);
    }
    else if (pid > 0)//父进程 pid为子进程的id
    {
        value--;
        printf("父进程(%d)继续执行,value=%d,value的地址=%p\n",getpid(),value,&value);
    }

    //父子进程中的value是两个不同的内存变量，各自不同的物理内存中存储自己的数据
    //但从程序中得到的变量地址却是一样的，说明程序操作的不是物理内存，而是虚拟内存
    //之所以虚拟内存地址相同，是因为fork做了父进程的内存完整拷贝来作为子进程的虚拟内存
    
    return 0;
}